package com.cc.alltype;

import java.io.*;

public class NetUtils {
    /**
     * 传入参数是IP地址的字符串
     * 网络通畅返回的结果是：
     * 正在 Ping 192.168.0.201 具有 32 字节的数据:
     * 来自 192.168.0.201 的回复: 字节=32 时间<1ms TTL=128
     * 来自 192.168.0.201 的回复: 字节=32 时间<1ms TTL=128
     * 来自 192.168.0.201 的回复: 字节=32 时间=3ms TTL=128
     * 来自 192.168.0.201 的回复: 字节=32 时间=9ms TTL=128
     *
     * 192.168.0.201 的 Ping 统计信息:
     *     数据包: 已发送 = 4，已接收 = 4，丢失 = 0 (0% 丢失)，
     * 往返行程的估计时间(以毫秒为单位):
     *     最短 = 0ms，最长 = 9ms，平均 = 3ms
     * 命令返回的结果是：0
     *
     * 网络不通返回的结果是：
     * Ping 请求找不到主机 192.168.0.2011。请检查该名称，然后重试。
     * @param ip 测试用IP地址
     * @return true表示网络畅通
     */
    public static boolean ping(String ip){
        //String[] cmds = {"/bin/sh", "-c", "ps -ef | grep xxx | grep -v grep | awk '{ print $2 }'"};
        String[] cmds = {"ping",ip};
        Process process = null;
        try {
            process = Runtime.getRuntime().exec(cmds);
            // 获取标准输入流 process.getInputStream()
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(),"gbk"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            // waitFor 阻塞等待 异步进程结束，并返回执行状态，0代表命令执行正常结束。
            //System.out.println("命令返回的结果是：" + process.waitFor());
            return process.waitFor() == 0 ? true : false;
        } catch (IOException | InterruptedException e) {
            if (process != null) {
                // 销毁当前进程，阻断当前命令执行
                process.destroy();
            }
            e.printStackTrace();
            return false;
        }
    }

    public static void main(String[] args) {
        boolean ping = ping("192.168.0.2011");
        System.out.println("网络通畅：" + ping);
    }
}
